package com.yuhuihui.common.utils.encryption;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

/**
 * Base64工具类
 *
 * @author yuhh
 * @date 2023-05-25 13:51:44
 */
public final class Base64Util {

    /**
     * 默认编码
     */
    private final static String CHARSET = "utf-8";

    /**
     * base64解密，返回string字符串
     *
     * @param data 需要解密的内容
     * @return {@link String } 解密后的内容
     * @throws UnsupportedEncodingException 不支持编码异常
     * @author yuhh
     * @date 2023-05-25 13:51:49
     */
    public static String decodeReturnStr(String data) throws UnsupportedEncodingException {
        return new String(decode(data));
    }

    /**
     * base64解密，返回bety数组
     *
     * @param data 需要解密的内容
     * @return {@link byte[] } 解密后的内容
     * @throws UnsupportedEncodingException 不支持编码异常
     * @author yuhh
     * @date 2023-05-25 13:51:56
     */
    public static byte[] decode(String data) throws UnsupportedEncodingException {
        return Base64.getDecoder().decode(data.getBytes(CHARSET));
    }

    /**
     * base64加密
     *
     * @param bytes 需要加密的byte数组
     * @return {@link byte[] } 加密后的内容
     * @author yuhh
     * @date 2023-05-25 13:52:01
     */
    public static byte[] encode(byte[] bytes){
        return Base64.getEncoder().encode(bytes);
    }

    /**
     * base64加密
     *
     * @param bytes 需要加密的byte数组
     * @return {@link String } 加密后的内容
     * @author yuhh
     * @date 2023-05-25 13:52:06
     */
    public static String encodeStr(byte[] bytes){
        return new String(encode(bytes));
    }

    /**
     * base64加密
     *
     * @param data 需要加密的字符串
     * @return {@link byte[] } 加密后的内容
     * @throws UnsupportedEncodingException 不支持编码异常
     * @author yuhh
     * @date 2023-05-25 13:52:11
     */
    public static byte[] encode(String data) throws UnsupportedEncodingException {
        return encode(data.getBytes(CHARSET));
    }

    /**
     * base64加密
     *
     * @param data 需要加密的字符串
     * @return {@link String } 加密后的内容
     * @throws UnsupportedEncodingException 不支持编码异常
     * @author yuhh
     * @date 2023-05-25 13:52:16
     */
    public static String encodeStr(String data) throws UnsupportedEncodingException {
        return encodeStr(data.getBytes(CHARSET));
    }
}
